package com.itheima.ydd.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.ydd.common.BusinessException;
import com.itheima.ydd.common.PageBean;
import com.itheima.ydd.common.ResultData;
import com.itheima.ydd.entity.YddArticle;
import com.itheima.ydd.entity.YddTag;
import com.itheima.ydd.service.IYddArticleService;
import com.itheima.ydd.service.IYddTagService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 前端控制器
 * </p>
 *
 * @author ChenTianSui
 * @since 2022-10-12
 */
@Slf4j
@RestController
@RequestMapping("/ydd_tag")
public class YddTagController {
    @Autowired
    private IYddTagService tagService;
    @Autowired
    private IYddArticleService articleService;

    /**
     * 标签管理分页查询
     *
     * @param tagname 条件查询名称
     * @param page    当前页
     * @param limit   一页最大条数
     * @return
     */
    @GetMapping("/list")
    public ResultData tagPage(String tagname, Integer page, Integer limit) {
        log.info("标签管理分页:当前第{}页,当前页最多{}条数据", page, limit);
        //分页构造器
        Page<YddTag> pageInfo = new Page<>(page, limit);
        //条件构造器
        LambdaQueryWrapper<YddTag> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(!tagname.isEmpty(), YddTag::getTagname, tagname);
        queryWrapper.orderByDesc(YddTag::getId);
        tagService.page(pageInfo, queryWrapper);
        PageBean<YddTag> tagPageBean = new PageBean<>();
        //当前页
        tagPageBean.setCurrentPage(pageInfo.getCurrent());
        //每页显示条数
        tagPageBean.setPageSize(pageInfo.getSize());
        //总页数
        tagPageBean.setTotalPages(pageInfo.getPages());
        //总条数
        tagPageBean.setCount(pageInfo.getTotal());
        //返回前端页面的具体数据
        tagPageBean.setData(pageInfo.getRecords());
        return ResultData.ok("", tagPageBean);
    }

    /**
     * 新增标签数据
     *
     * @param yddTag
     * @return
     */
    @PostMapping("/add")
    public ResultData addTag(@RequestBody YddTag yddTag) {
        log.info("标签管理新增数据:{}", yddTag.toString());
        yddTag.setDefaultData(null);
        tagService.save(yddTag);
        return ResultData.ok("", null);

    }

    /**
     * 获取全部标签数据
     *
     * @return
     */
    @GetMapping("/all")
    public ResultData all() {
        log.info("查询全部标签(tag)数据");
        List<YddTag> yddTagList = tagService.list();
        return ResultData.ok("", yddTagList);
    }

    /**
     * 根据id查询数据,数据回显
     *
     * @param id
     * @return
     */
    @GetMapping("/rowInfo")
    public ResultData rowInfo(Integer id) {
        log.info("根据id查询tag数据,id为{}", id);
        YddTag yddTag = tagService.getById(id);
        return ResultData.ok("", yddTag);

    }

    /**
     * 修改数据
     *
     * @param yddTag
     * @return
     */
    @PostMapping("/update")
    public ResultData update(@RequestBody YddTag yddTag) {
        log.info("更新tag数据:{}", yddTag.toString());
        LambdaQueryWrapper<YddTag> tagLambdaQueryWrapper = new LambdaQueryWrapper<>();
        tagLambdaQueryWrapper.eq(YddTag::getId, yddTag.getId());
        tagService.update(yddTag, tagLambdaQueryWrapper);
        return ResultData.ok("", null);

    }

    /**
     * 根据id删除数据
     *
     * @param id
     * @return
     */
    @GetMapping("/del")
    public ResultData del(Integer id) {
        //根据id查出标签名
        YddTag yddTag = tagService.getById(id);
        if ("1".equals(yddTag.getDefaultData())) {
            throw new BusinessException("系统默认数据,不允许删除！");
        }
        String tagname = yddTag.getTagname();
        //查询出ydd_article表中的标签数据(tags)
        List<YddArticle> articleList = articleService.list();
        //collectTags接收所有文章中包含的标签数据
        articleList.stream().map(item -> {
            String tags = item.getTags();
            if (tags != null) {
                //“,”切割出每条标签数据
                String[] splitTag = tags.split(",");
                for (String s : splitTag) {
                    if (s.equals(tagname)) {
                        throw new BusinessException("系统默认数据,不允许删除！");
//                        return ResultData.error("有文章使用该标签,不能删除！");
                    }
                }
                return splitTag;
            }
            return null;
        }).collect(Collectors.toList());
        tagService.removeById(id);
        return ResultData.ok("", "");
    }

}
